#include "power_mgmt.h"
#include "fingerprint.h"
#include "rfid.h"
#include "motor.h"
#include "oled.h"

// 电源管理状态
static PowerState currentState = POWER_STATE_NORMAL;
static SystemMode currentMode = MODE_NORMAL;
static void (*lowBatteryCallback)(void) = NULL;

// 电源管理初始化
SystemStatus POWER_Init(void)
{
    // TODO: 初始化ADC用于电池电压检测
    // TODO: 初始化充电检测引脚
    // TODO: 配置低功耗模式
    
    currentState = POWER_STATE_NORMAL;
    currentMode = MODE_NORMAL;
    
    return SYSTEM_OK;
}

// 进入低功耗模式
SystemStatus POWER_EnterLowPowerMode(void)
{
    // 各模块进入低功耗模式
    FP_EnterLowPower();
    RFID_EnterLowPower();
    MOTOR_EnterLowPower();
    OLED_EnterLowPower();
    
    // TODO: 配置MCU进入低功耗模式
    // TODO: 配置唤醒源
    
    currentState = POWER_STATE_SAVING;
    return SYSTEM_OK;
}

// 退出低功耗模式
SystemStatus POWER_ExitLowPowerMode(void)
{
    // TODO: MCU退出低功耗模式
    
    // 各模块退出低功耗模式
    FP_ExitLowPower();
    RFID_ExitLowPower();
    MOTOR_ExitLowPower();
    OLED_ExitLowPower();
    
    currentState = POWER_STATE_NORMAL;
    return SYSTEM_OK;
}

// 获取电池电量百分比
uint8_t POWER_GetBatteryLevel(void)
{
    // TODO: 读取ADC获取电池电压
    // TODO: 将电压转换为电量百分比
    
    uint8_t level = 100;  // 临时返回满电量
    
    // 检查是否低电量
    if (level < 20 && lowBatteryCallback != NULL) {
        lowBatteryCallback();
    }
    
    return level;
}

// 获取电源状态
PowerState POWER_GetState(void)
{
    // TODO: 检查充电状态
    // TODO: 检查电池电压
    
    return currentState;
}

// 设置系统工作模式
SystemStatus POWER_SetMode(SystemMode mode)
{
    switch (mode) {
        case MODE_NORMAL:
            POWER_ExitLowPowerMode();
            break;
            
        case MODE_ADMIN:
            POWER_ExitLowPowerMode();
            break;
            
        case MODE_POWER_SAVE:
            POWER_EnterLowPowerMode();
            break;
            
        default:
            return SYSTEM_ERROR;
    }
    
    currentMode = mode;
    return SYSTEM_OK;
}

// 注册低电量回调函数
void POWER_RegisterLowBatteryCallback(void (*callback)(void))
{
    lowBatteryCallback = callback;
} 